package com.atguigu.srb.sms.feign;

import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.RoundRobinRule;
import com.netflix.loadbalancer.Server;
import org.apache.commons.lang3.RandomUtils;
import org.springframework.stereotype.Component;

import java.util.List;
//@Component //注入到容器中覆盖默认的负载均衡器
public class MyRandomRule extends RoundRobinRule {
    //挑选处理远程访问请求的 目标服务地址的方法
    @Override
    public Server choose(ILoadBalancer lb, Object key) {
        //根据要访问的服务名，例如service-core 到注册中心拉取到的所有的ip端口对象列表
//        List<Server> allServers = lb.getAllServers();
        //根据要访问的服务名 在注册中心拉取到的在线的ip端口对象列表
        List<Server> reachableServers = lb.getReachableServers();

//        return super.choose(lb, key);
        //随机生成索引获取服务器对象返回
        return reachableServers.get(RandomUtils.nextInt(0,reachableServers.size()));
    }
}
